在 angular2 constructor() 中使用 private 与 public 关键字有什么不同

what is different use private vs public keyword in angular2 constructor()

我开始学习 angular v2 和 ionic v2。

在 ng2 英雄教程中,他们在构造函数中使用了私有关键字,但在离子样板源中,他们在构造函数中使用了 public 关键字。

angular2个教程

heroes: Hero[];

constructor(
     private heroS: HeroService,
     private router: Router
) { }

ngOnInit() { 
    this.heroS.getHeroes().then(heroes => {
        this.heroes = heroes;
    })
}

离子教程

constructor(public navCtrl: NavController, public navParams: NavParams) {
}

反编译成es5后,public和private在.js文件中是一样的。 但是我真的不明白有什么区别。

我相信 Ionic 样板代码在构造器中使用 public 成员以便能够利用 Ahead of Time (AoT) Compilation。 请参阅 Angular 2 预编译器:我必须将所有 class 属性设置为 public 吗? .

private 和 public 仅适用于编译时而不是 运行 时。默认情况下,函数是 public,将某些内容标记为 "private" 只是宣布您打算将其保密。

这是打字稿"Parameter Properties"的特点。当我们使用任何关键字 Public、Private、Protected 或 readonly 时,它会自动创建并初始化 class 属性。请检查 https://medium.com/@daveford/parameter-properties-in-typescript-c99df6ba13f7